from django.http import JsonResponse
from django.shortcuts import render

from commodity.models import CommodityInfos, Types
from django.views.generic import TemplateView


# Create your views here.
def indexView(request):
    title = '首页'
    classContent=""
    commodityInfos=CommodityInfos.objects.order_by('-sold').all()[:8]
    types=Types.objects.all()
    c1=[x.seconds for x in types if x.firsts=='儿童服饰']
    clothes=CommodityInfos.objects.filter(types__in=c1).order_by('-sold')[:5]
    f1=[x.seconds for x in types if x.firsts=='奶粉辅食']
    food=CommodityInfos.objects.filter(types__in=f1).order_by('-sold')[:5]
    g1=[x.seconds for x in types if x.firsts=='儿童用品']
    goods=CommodityInfos.objects.filter(types__in=g1).order_by('-sold')[:5]
    return render(request,'index.html',locals())

class indexClassView(TemplateView):

    template_name = 'index.html'
    template_engine = None
    content_type = None
    extra_context = {'title':'首页','classContent':''}
    def get_context_data(self, **kwargs):
        context = super(indexClassView, self).get_context_data(**kwargs)
        context['commodityInfos'] = CommodityInfos.objects.order_by('-sold').all()[:8]
        types=Types.objects.all()
        cl=[x.seconds for x in types if x.firsts=='儿童服饰']
        context['clothes']=CommodityInfos.objects.filter(types__in=cl).order_by('-sold')[:5]
        fl=[x.seconds for x in types if x.firsts=='奶粉辅食']
        context['food']=CommodityInfos.objects.filter(types__in=fl).order_by('-sold')[:5]
        gl=[x.seconds for x in types if x.firsts=='儿童用品']
        context['good']=CommodityInfos.objects.filter(types__in=gl).order_by('-sold')[:5]
        return context
    def get(self,request,*args,**kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context)
    def post(self,request,*args,**kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context)

def page_not_found(request, exception):
    return render(request, '404.html', status=404)
def page_error(request):
    return render(request, '500.html', status=500)
def collectView(request):
    """
    商品收藏视图函数（AJAX接口）
    - 处理用户的收藏请求
    - 更新商品收藏的数量
    - 记录用户收藏状态到Session
    Session Cookie
    """
    # 首先从请求对象request获取请求参数id的值，并赋值给变量id
    # 代表当前商品的主键id
    id = request.GET.get('id', '')
    # 然后设置响应内容result，以字典的形式表示
    result = {"result": "已收藏"}
    # 最后从请求对象request获取会话Session数据likes，
    # 如果存在数据，那么赋值给变量likes，否则变量likes设置为空列表
    likes = request.session.get('likes', [])
    # 如果变量id不为空，并且变量id不在likes中，那么说明当前的商品
    # 还没有被当前用户加入收藏，程序将执行商品收藏的操作
    if id and not int(id) in likes:
        # 使用F表达式原子性的增加商品收藏数，避免并发问题
        # 将变量id作为模型CommodityInfos的查询条件，再由查询对象使用update方法和F方法
        # 实现字段likes的自增一操作
        CommodityInfos.objects.filter(id=id).update(likes=F('likes') + 1)
        # 然后将响应内容result改为收藏成功
        result["result"] = "收藏成功"
        # 最后，将当前商品的id写入会话session数据likes，标记当前商品已经被用户收藏了
        request.session['likes'] = likes + [int(id)]
    # 返回JSON的响应
    # JsonResponse有将Python的字典转换为JSON数据
    # 使用HttpResponse实现：
    # HttpResponse(json.dumps(result), content_type='application/json')
    return JsonResponse(result)